#ifndef SOURSE_MIDDLEWARE_TARM_RUN_H_
#define SOURSE_MIDDLEWARE_TARM_RUN_H_

#include <stdint.h>

#include <tarm_ctimer.h>
#include "tarm_FactorConfig.h"



//SPEED DEBUG MACRO
//#define _DEBUG_TARM_SPEED_DELAY_TIME_


/************ function **************/

/************************************************************
*	四个函数：
*	xy_to_angle：坐标信息->角度信息，运算函数
*	xy_des_to_angle：坐标信息->角度信息，同步处理函数（包含栅格自动对齐）
*	angle_to_xy：角度信息->坐标信息，运算函数
*	angle_des_to_xy：角度信息->坐标信息，同步处理函数（包含栅格自动对齐）
************************************************************/
void xy_to_angle(double x,double y,double* prime_angle,double* vice_angle);
void xy_des_to_angle(void);
void angle_to_xy(double prime_angle,double vice_angle,double *x,double *y);
void angle_des_to_xy(void);
void angle_cur_to_xy(void);

/************************************************************
*	已知xy或angle中的一个，调用函数即可驱动机械臂运动至目标位置
************************************************************/
int  point_to_point_xy(double x,double y,uint16_t speed_ms);
int point_to_point_angle(double prime,double vice,uint32_t speed_ms);
int  point_to_point_rotation(double r,uint16_t speed_ms);

int  point_to_point_xy_pvthr(double x,double y,uint16_t speed_ms);

/************************************************************
*	在定时器中断函数中调用的处理函数
************************************************************/
void handle_interrupt(void);
void CloseLoopUpdate(void);
void handle_prime(void);
void handle_vice(void);
void handle_rotation(void);


int handle_pvaxis(double *retu_lengthPerAngle, int *retu_whichOne);
int handle_pvinterrupt(uint8_t i_firstStartFlag);
double SpeedFactorTransferFunc(const double inpu_percentage,
		const double inpu_commandSpeedFactor,
		const double inpu_sysPreSetSpeedFactor);

/************************************************************
*	复位函数，初始化、碰到限位时使用
*	将目标、现时的xy、angle值全部复位
	除能TIM2、3中断
************************************************************/
void reset_point(void);
void reset_point_prime(void);
void reset_point_vice(void);

/************************************************************
*	回到零点
*	（null_point）：null_prime=60,null_vice=40;
*	参考点是start_prime=57,start_vice=32;
************************************************************/
void goto_null_point(void);

/************************************************************
*	限位到达处理
************************************************************/
void prime_arrive(void);
void vice_arrive(void);
void rotation_arrive(void);

/************************************************************
*	夹持
************************************************************/
void click_pwm(void);
void turn_pwm(void);



#endif /* SRC_MIDDLEWARE_TARM_IIC_H_ */
